package com.mapper;

import com.entity.Notification;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * ClassName: NotificationMapper
 * Description:
 *
 * @author L_Z_R
 * @version 1.0
 * @create 2025/06/16 19:09
 */
public interface NotificationMapper {
    /**
     * 插入新的通知记录
     *
     * @param notification 通知实体对象
     */
    void insert(Notification notification);

    /**
     * 统计用户未读通知数量
     *
     * @param receiver_id 用户ID
     * @return 未读通知数量
     */
    int countUnreadByUserId(@Param("receiverId") Integer receiverId);

    /**
     * 根据通知类型查询用户通知信息
     *
     * @param receiverId 接收者Id
     * @param type   通知类型
     * @return 通知列表
     */
    List<Notification> selectByType(@Param("receiverId") Integer receiverId, @Param("type")byte type);

    /**
     * 更新通知阅读状态
     *
     * @param notificationId 通知ID
     * @return 受影响的行数
     */
    int updateReadStatus(@Param("id") Long notificationId);

    /**
     * 查询用户最近一条同类通知
     *
     * @param userId   用户ID
     * @param type     通知类型
     * @param sourceId 来源ID
     * @return 通知对象，如果没有则返回null
     */
    Notification selectLastSimilar(@Param("userId") Long userId,
                                   @Param("type") Integer type,
                                   @Param("sourceId") Long sourceId);

    /**
     * 更新通知内容
     *
     * @param id      通知ID
     * @param content 新的通知内容
     * @return 受影响的行数
     */
    int updateContent(@Param("id") Long id, @Param("content") String content);

    /**
     * 批量标记通知为已读
     *
     * @param ids 通知ID列表
     * @return 受影响的行数
     */
    int batchMarkAsRead(@Param("ids") List<Long> ids);

    /**
     * 查询用户最新通知
     *
     * @param userId 用户ID
     * @param limit  查询条数限制
     * @return 通知列表
     */
    List<Notification> selectLatestNotifications(@Param("userId") Long userId,
                                                 @Param("limit") Integer limit);
}
